home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / passwrd4.arc / LOCK.ASM next >
Assembly Source File  |  1985-04-30  |  8KB  |  192 lines

  1. PAGE   60,132
  2. TITLE  LOCK V1.2 - RECALLS PASSWORD DEVICE DRIVER CODE
  3.  
  4. ;-----------------------------------------------------------------------
  5. ;  LOCK V1.2
  6. ;
  7. ;  LOCK IS DESIGNED TO WORK IN CONJUNCTION WITH PASSWRD4.SYS.
  8. ;  ITS PURPOSE IT TO CALL A PORTION OF CODE INTERNAL TO THE
  9. ;  DEVICE DRIVER PASSWRD4.SYS. THIS WILL ENABLE A USER TO "LOCK"
  10. ;  THE PC UNTIL A USER REPLIES WITH THE CORRECT PASSWORD.
  11. ;  ** CAUTION  BEWARE OF UPPER CASE VS LOWER CASE WHEN RESPONDING **
  12. ;
  13. ;  THIS CODE WILL CHECK THE INTERUPT VECTOR 66h FOR A NON ZERO SEGMENT
  14. ;  REFERENCE BEFORE CALLING THE PASSWORD ROUTINE. PASSWRD4.SYS WILL
  15. ;  INITIALIZE THIS INTERUPT A BOOT TIME. SINCE THE PASSWRD4.SYS
  16. ;  DEVICE DRIVER, LIKE ANY DEVICE DRIVER, REMAINS RESIDENT THE USER
  17. ;  IS ASSURED THAT HE ONLY NEED CHANGE PASSWRD4.SYS IN ORDER TO
  18. ;  CHANGE THE SYSTEM PASSWRD.
  19. ;
  20. ;                                       JOHN R. PETROCELLI
  21. ;                                       02/25/85
  22. ;                                  REV  04/30/85
  23. ;
  24. ;----------------------------------------------------------------------
  25. ;
  26. INT_VECTORS  SEGMENT AT 0H          ; POINT TO INTERUPT VECTOR TABLE
  27.      ORG 66H*4                      ; INT 66H
  28.      ASK_OFF DW                     ; OFFSET OF PASSWORD RECALL
  29.      ASK_SEG DW                     ; SEGMENT OF PASSWORD RECALL
  30. INT_VECTORS ENDS
  31.  
  32. CODE_SEG  SEGMENT PARA 'CODE'
  33.  
  34.      ASSUME  CS:CODE_SEG, DS:CODE_SEG, ES:INT_VECTORS, SS:NOTHING
  35.  
  36.      ORG     100H                   ; NEEDED FOR A .COM PROGRAM
  37.  
  38. BEGIN:
  39.      PUSH    DS                     ; SAVE REGISTERS FOR
  40.      PUSH    ES                     ; GOOD HOUSKEEPING (NO PUN
  41.      PUSH    AX                     ; INTENDED)
  42.      PUSH    BX                     ;
  43.      PUSH    DX                     ;
  44.  
  45.      MOV     AX,0                   ;  SET ES TO REFERENCE
  46.      MOV     ES,AX                  ;  INT_VECTORS
  47.  
  48.      MOV     AX,CS                  ;  SET DS TO REFERENCE
  49.      MOV     DS,AX                  ;  CODE_SEG
  50.  
  51. ;=======================================================================
  52. ; THE FOLLOWINT 8 LINES RESET INT 09h TO POINT TO A PORTION OF THIS
  53. ; CODE(SEE BELOW) IN ORDER TO ELIMINATE CTRL STYLE KEYSTROKES
  54. ;=======================================================================
  55.      CLI                            ;  INTERUPTS OFF
  56.      MOV    AX,WORD PTR ES:[09h*4]  ;  INT 09h OFFSET INTO AX
  57.      MOV    KBINT_OFF,AX            ;  SAVE IT FOR RECALL
  58.      MOV    AX,WORD PTR ES:[09h*4+2]              ;  INT 09h SEG INTO AX
  59.      MOV    KBINT_SEG,AX                          ;  SAVE IT FOR RECALL
  60.      MOV    WORD PTR ES:[09h*4],OFFSET CTL_ENTRY  ;  NEW INT 09h OFFSET
  61.      MOV    WORD PTR ES:[09h*4+2],CS              ;  NEW INT 09h SEG
  62.      STI                            ;  INTERUPTS ON
  63. ;=======================================================================
  64.  
  65.      LEA     BX,ASK_OFF             ;  SET ES:BX TO POINT TO
  66.                                     ;  LOCATION IN THE INT VECTOR
  67.                                     ;  TABLE CONTAINING SEG & OFFSET
  68.                                     ;  OF PASSWORD RECALL ROUTINE
  69.  
  70.      MOV     AX,ES:[BX+2]           ;  LOAD AX WITH SEGMENT OF CALL
  71.      CMP     AX,0                   ;  AND IF THE SEGMENT IS 0 THEN
  72.      JZ      ERROR_EXIT             ;  EXIT - NOT INITIALIZED
  73.  
  74.      CALL    DWORD PTR ES:[BX]      ; CALL PWORD IF INSTALLED
  75.                                     ; ES:BX WILL POINT TO THE ADDRESS
  76.                                     ; OF THE ROUTINE TO BE CALLED
  77.  
  78. EXIT:
  79. ;=======================================================================
  80. ; THE FOLLOWING 8 LINES RESET INT 09h TO ITS ORIGINAL SEGMENT AND OFFSET
  81. ; AS IT WAS UPON ENTRY TO THIS ROUTINE
  82. ;=======================================================================
  83.      CLI                            ; INTERUPTS OFF
  84.      MOV    AX,0                    ; LOAD AX WITH SEGMENT OF INTERUPTS
  85.      MOV    ES,AX                   ; AND MAKE ES POINT TO IT
  86.      MOV    AX,KBINT_OFF            ; LOAD AX WITH ORIGINAL INT 09h OFFS
  87.      MOV    WORD PTR ES:[09h*4],AX  ; RESTORE ORIGINAL INT 09h OFFSET
  88.      MOV    AX,KBINT_SEG            ; LOAD AX WITH ORIGINAL INT 09h SEG
  89.      MOV    WORD PTR ES:[09h*4+2],AX ; RESTORE ORIGINAL INT 09h SEG
  90.      STI                            ; INTERUPTS ON
  91. ;=======================================================================
  92.  
  93.      POP     DX                     ; RESTORE REGISTERS FOR
  94.      POP     BX                     ; GOOD HOUSKEEPING (NO PUN
  95.      POP     AX                     ; INTENDED)
  96.      POP     ES                     ;
  97.      POP     DS                     ;
  98.  
  99.      RET                            ; RETURN TO DOS
  100.  
  101. ERROR_EXIT:                         ; SEGMENT AND/OR OFFSET
  102.                                     ; WERE 0000 SO WE DON'T CALL
  103.                                     ; JUST PRINT ERROR MESSAGE
  104.  
  105.      MOV     DX,OFFSET NO_INIT      ; DS:DX POINTS TO ERROR MSG
  106.      MOV     AX,0900H               ; SET UP AX TO PRINT DS:DX
  107.      INT     21H                    ; PRINT ERROR MSG
  108.  
  109.      JMP     EXIT                   ; RETURN TO DOS
  110.  
  111.      NOP                            ; PAD
  112.      NOP                            ; PAD
  113.      NOP                            ; PAD
  114.  
  115. CTL_ENTRY:
  116.          NOP
  117.          STI                        ; RESET INTERRUPTS
  118.          PUSH      DS               ; SAVE SYSTEM(OTHERWISE IT MAY
  119.          PUSH      ES               ; BECOME AN ENDANGERED SPECIES!)
  120.          PUSH      AX
  121.          PUSH      BX
  122.          PUSH      CX
  123.          PUSH      DX
  124.          PUSH      SI
  125.          PUSH      DI
  126.          PUSH      BP
  127.  
  128.          MOV       SI,CS             ; GET SEGMENT VALUE
  129.          MOV       DS,SI             ; INTO DATA SEGMENT
  130.          MOV       ES,SI             ; AND EXTRA
  131.  
  132.          IN        AL,060H           ; READ KEYBOARD INPUT
  133.  
  134.          TEST      AL,080H           ; SEE IF KEY RELEASE
  135.          JNZ       CTL_EXIT          ; YES, IGNORE RELEASES
  136.  
  137.          CMP       AL,01DH           ; SEE IF CTRL KEY DEPRESSED
  138.          JNZ       CTL_EXIT          ; NO, GO TO NORMAL HANDLING
  139.  
  140.                                      ; KEY WE WANT, RESET KEYBOARD
  141.                                      ; PORT TO ACKNOWLEDGE RECEIPT
  142.                                      ; OF KEYSTROKE INFO
  143.  
  144.          IN        AL,061H           ; READ 8255 PORT
  145.          OR        AL,080H           ; SET ACKNOWLEDGE SIGNAL BIT
  146.          OUT       061H,AL           ; SEND ACKNOWLEDGE TO PORT
  147.          AND       AL,07FH           ; RESET ACKNOWLEDGE BIT
  148.          OUT       061H,AL           ; RESTORE ORIGINAL 8255 PORT STATUS
  149.  
  150.          MOV       AL,020H           ; SEND EOI TO 8259 COMMAND REG
  151.          OUT       020H,AL
  152.  
  153.          POP       BP
  154.          POP       DI                ; RESTORE
  155.          POP       SI
  156.          POP       DX
  157.          POP       CX
  158.          POP       BX
  159.          POP       AX
  160.          POP       ES
  161.          POP       DS
  162.          IRET                        ; RETURN FROM INTERRUPT
  163.  
  164. CTL_EXIT:                            ; HANDLE KEYSTROKE NORMALLY,
  165.          POP       BP                ; JUMP TO REGULAR KEYBOARD HANDLER
  166.          POP       DI
  167.          POP       SI                ; RESTORE REGISTERS
  168.          POP       DX
  169.          POP       CX
  170.          POP       BX
  171.          POP       AX                ; JUMP TO REGULAR KEYBOARD ROUTINE
  172.          POP       ES
  173.          POP       DS
  174. ;
  175.                    DB        0EAH    ; THIS PRODUCES FAR JUMP TO BELOW
  176. ;
  177.  KBINT_OFF         DW        0       ; STORE OLD KEYBOARD INT ADDRESS
  178.  KBINT_SEG         DW        0
  179.  
  180.  
  181. NO_INIT DB 1BH,'[5m',                ; MAKE "PASSWORD" BLINK
  182.         DB ' PASSWORD '
  183.         DB 1BH,'[0m'                 ; ATTRIBUTES TO NORMAL
  184.         DB ' Device Driver Does Not'
  185.         DB ' Appear To Be Installed'
  186.         DB 07H,0DH,0AH,'$'           ; BEEP+CR+LF
  187.  
  188.  
  189. CODE_SEG    ENDS
  190.  
  191.      END    BEGIN
  192.